مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

آموزش کامل آرایه ها در سی شارپ - جلسه دوم - کلیک سایت


قسمت دوم

همانطور که در قسمت قبلی گفته شد آرایه در سی شارپ در طبقه بندی نوع ، از نوع مرجع ( reference ) به شمار می رود و برای نگهداری چندین متغیر با مقادیر متفاوت اما نوع یکسان استفاده می شود. همچنین با ایجاد کردن یک نمونه آرایه در سی شارپ و روش های متفاوت مقدار دهی و دسترسی به مقادیر آن آشنا شدیم. به علاوه در مورد خطا های متداولی که با آن ممکن است برخورد شود نیز صحبت کردیم. در این قسمت سعی داریم تا در مورد مطالب کامل تری صحبت کنیم .

کپی کردن مقادیر آرایه در سی شارپ

از انجا که ارایه در سی شارپ از نوع مرجع می باشد زمانی که یک متغیر از نوع آرایه به متغیر ارایه دیگری انتساب داده می شود در واقع ادرس مقادیری که متغیر اول به آن اشاره می کند در درون متغیر جدید کپی می شود و در نتیجه ان، از ان پس هر دو متغیر ارایه در سی شارپ به یک مکان اشاره می کنند و تغییر در مقادیر توسط هر کدام باعث تغبیر در دیگری می شود .

مثال : کپی کردن دو ارایه با انتساب دو متغیر از نوع ارایه  

 static void Main(string[] args)
        {

            int[] test1 = new int[3] { 1, 2, 3 };
            int[] test2 = new int[3] ;

            test2 = test1;
            test2[2] = 20;
            Console.WriteLine("test1[2]=" + test1[2]);
            test1[0] = 10;
            Console.WriteLine("test2[0]=" + test2[0]);

        }  


 درمثال بالا ابتدا دو  متغیر از نوع آرایه در سی شارپ با نام های test1 و test2  تعریف می شود. سپس با عملگر انتساب متغیر test1 را به متغیر test2  انتساب می دهیم. در مرحله بعد ایتم دخیره شده در مکان با اندیس 2 در متغیر test2 را تغییر می دهیم  و سپس مقدار ایتم در اندیس 2 در متغیر test1  را چاپ می کنیم آنچه اتفاق می افتد این است که، مقدار ایتم 2 در متغیر test1 نیز تغییر کرده است ( با وجود اینکه ما تغییری در آن ایجاد نکرده ایم ) زیرا هر دو  متغیر test1 و test2 به یک مکان از حافظه اشاره می کنند. و هین طور  به صورت بالعکس تغییر در مقادیر ایتم های متغیر test1 نیز باعث تغییر در مقدار ایتم های متغیر test2 خواهد شد. خروجی قطعه کد بالا به صورت زیر خواهد بود :

test1[2]=20
test2[0]=10


برای کپی کردن مقادیر آرایه به متغیر آرایه دیگر کاری که باید به جای انتساب متغیر آرایه در سی شارپ ، انجام بدهیم این است که مقادیر آرایه در سی شارپ را در متغیر آرایه جدید کپی کرد .در این حالت دو متغیر ارایه مستقل داریم که به دو مکان متفاوت در حافظه اشاره می کنند و اگرچه داراری مقادیر یکسانی هستند اما تغییر در یکی تاثیری بر دیگری ندارد.
مثال  :  کپی کردن مقدار یک آرایه در سی شارپ در اریه جدید.
  

class Program
    {
        static void Main(string[] args)
        {
            int[] test1 = new int[3] { 1, 2, 3 };
            int[] test2 = new int[3] ;

            for (int i=0; i< test1.Length;i++)
            {
                test2[i] = test1[i];
            }
            for (int i = 0; i < test1.Length; i++)
            {
                Console.Write("test1["+i+"]= " + test1[i]+ " ");             
            }
            Console.WriteLine();
            for (int i = 0; i < test1.Length; i++)
            {               
                Console.Write("test2[" + i + "]= " + test2[i]+" ");
            }

            test2[1] = 20;
            test1[1] = 50;
            Console.WriteLine("\n new values :\n ");

            for (int i = 0; i < test1.Length; i++)
            {
                Console.Write("test1[" + i + "]= " + test1[i] + " ");
            }
            Console.WriteLine();
            for (int i = 0; i < test1.Length; i++)
            {
                Console.Write("test2[" + i + "]= " + test2[i] + " ");
            }

        }        
    }


 در مثال بالا در حلقه for  با انتساب مقادیر ایتم  های متغیر test1 ، چون این مقادیر از نوع int هستند و نوع int همان طور که در مقاله قبلی به ان اشاره شد زیر مجموعه نوع مقدار ( value type ) است، در نتیجه این انتساب یک کپی از مقادیر ایتم های متغیر ارایه test1 ، در ایتم های ارایه test2 ایجاد می شود. حالا متغیر test2 متغیر ارایه ای است که به مکان دیگری در حافظه اشاره می کند که در ان مقادیر  ایتم ها برابر مقادیر ایتم ها در متغیر ارایه  test1 است  در مرحله بعد با تغییر در مقادیر ایتم های هر ارایه مشاهده می کنیم که بر دیگری تاثیری ندارند و تغییر در یکی باعث تغییر در دیگری نمی شود. خروجی قطعه برنامه بالا به صورت زیر خواهد بود :

test1[0]= 1 test1[1]=2 test1[2]=3
test2[0]=1 test2[1]=2 test2[2]=3

test1[0]= 1 test1[1]=20 test1[2]=3
test2[0]=1 test2[1]=50 test2[2]=3

 

کپی کردن مقادیر آرایه در سی شارپ از نوع مرجع

اگر ارایه از نوع مرجع داشته باشیم در این صورت در زمان کپی کردن مقادیر ارایه به صورت ایتم به ایتم، هر ایتم  چون خودش ادرس یک مکان در حافظه است در واقع ادرس ها است که در ایتم های متغیر جدید کپی می شود. با یک مثال سعی می کنم این مساله را روشن تر بیان کنم.
مثال : کپی دو آرایه در سی شارپ از نوع کلاسی با نام person

namespace arrayStatment

{
    public class person
    {
    
        public string name { get; set; }
        public string identityNumber { get; set; }

    }

    class Program
    {
        static void Main(string[] args)
        {
            person[]  persons = new person[3];
            for (int i = 0; i < persons.Length; i++)
            {
                persons[i] = new person();
            }

                persons[0].name="ali";
                persons[0].identityNumber  = "12345";
                persons[1].name = "ahmad";
                persons[1].identityNumber = "34567";
                persons[2].name = "meysam";
                persons[2].identityNumber = "7890";
           
            person[]  copyPersons = new person[3];

            for (int i=0; i< persons.Length;i++)
            {
                copyPersons[i] = persons [i];
            }
            for (int i = 0; i < persons.Length; i++)
            {
                Console.Write("persons["+i+"]= " + persons[i].name + " " + persons[i].identityNumber  +", " );             
            }
            Console.WriteLine();

            for (int i = 0; i < persons.Length; i++)
            {
                Console.Write("copyPersons[" + i + "]= " + copyPersons[i].name + " " + copyPersons[i].identityNumber + ", ");
            }

            copyPersons[0].name = " new name";
          
            Console.WriteLine("\n\n new values :\n ");
            for (int i = 0; i < persons.Length; i++)
            {
                Console.Write("persons[" + i + "]= " + persons[i].name + " " + persons[i].identityNumber + ", ");
            }
            Console.WriteLine();

            for (int i = 0; i < persons.Length; i++)
            {
                Console.Write("copyPersons[" + i + "]= " + copyPersons[i].name + " " + copyPersons[i].identityNumber + ", ");
            }

        }        
    }
}


 با اجرای قطعه کد بالا متوجه می شویم که  از ان جا که نوع کلاس از نوع مرجع است، زمانیکه با حلقه for هر ایتم از  متغیر ارایه persons را به متغیر ارایه copyPerson انتساب می دهیم هر دو ایتم حاوی ادرس هاای به یک مکان از حافظه می شوند در نتیجه تغییر در یکی باعث تغییر در دیگری می شود .
خروجی به صورت زیر خواهد بود :

persons[0]= ali 12345 , persons[1]= ahmad 34567, persons[1]= meysam 7890
copyPersons [0]= ali 12345 , copyPersons [1]= ahmad 34567, copyPersons [1]= meysam 7890

persons[0]= new name 12345 , persons[1]= ahmad 34567, persons[1]= meysam 7890
copyPersons [0]= new name 12345 , copyPersons [1]= ahmad 34567, copyPersons [1]= meysam 7890


گرداوری : سمانه وزیریان

فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

آموزش ارسال پیامک، آموزش ارسال پیامک تکی و گروهی ، ارسال پیامک به صورت اختصاصی برای هر مشترک، دریافت پیامک، مشاهده وضعیت…

توضیحات کلی مجموعه:   آیا می دونید قیمت نرم افزارهای مدیریت پیامک در حدود 150 هزار تومان است؟ اما توسط این دوره شما میتونید با مبلغ بسیار کمتر یک نرم افزار مدیریت پیامک رو به صورت کاملا حر…
فصلِ: 9 , تعداد قسمت ها: 59 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

در این فصل که فصل پایانی این دوره می باشد در مورد نحوه ساختن فایل نصبی سریع یا همان quick installer که روش پیشنهاد شده م…

توضیحات کلی مجموعه: پس از بازخوردهای بسیار خوبی که از دوره های آموزش برنامه نویسی سیستم اتوماسیون اداری و آموزش برنامه نویسی سیستم فروش و انبارداری مشاهده کردیم، تصمیم گرفتیم با توجه به درخ…
فصلِ: 13 , تعداد قسمت ها: 120 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

در این فصل که فصل آخر از مجموعه بزرگ آموزش سیستم اتوماسیون اداری می باشد در ابتدا در مورد اسناد و نامه های خارج از سازما…

دوره صفر تا صد  آموزش برنامه نویسی و پیاده سازی سیستم اتوماسیون اداری تحت شبکه. (توصیه می شود دومی مجموعه را حتما ببینید) امروزه اطلاعات یکی از مهمترین و با ارزشترین منابع هر اداره و یا ساز…
فصلِ: 4 , تعداد قسمت ها: 14 , سطح: مقدماتی

این فصل در یک نگاه:

توضیح تنظیمات گرافیک و صدا در یونیتی پیاده سازی منو ها …

به نام خدا   بازی‌سازی یک حرفه بسیار جذاب است و تبدیل شدن به یک بازی‌ساز حرفه‌ای آرزوی همه ماست. اینکه بتوانیم دنیای خاصی خلق کنیم و در این دنیا قوانین خود را پیاده کنیم، همیشه ما را به وج…
فصلِ: 11 , تعداد قسمت ها: 92 , سطح: صفر تا صد

این فصل در یک نگاه:

اجرای سیستم روی سیستم، قرار دادن سیستم روی سرور، تعریف Connetion String، آشنایی با فایل App.config، ساخت رشته اتصال به ص…

مهمترین تکنولوژیهای استفاده شده در این دوره پروژه محور (سیستم فروش کالا و انبارداری) طراحی گرافیکی به روش WPF (Windows Presentaion Foundation) آموزش کامل برنامه نویسی xaml (برای طراحی های …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید